home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / utils / ved04b / ved04b.doc < prev    next >
Text File  |  1994-12-15  |  20KB  |  438 lines

  1. ┌──────────────────────────────────────────────────────────────────────────┐
  2. │                                                                          │
  3. │   █   █ █████ ████              ███    █  █    ████  █████ █████   █     │
  4. │   █   █ █     █   █    █   █   █  ██   █  █    █   █ █       █    █ █    │
  5. │   █   █ ███   █   █    █   █   █ █ █   █████   ████  ███     █   █   █   │
  6. │    █ █  █     █   █     █ █    ██  █      █    █   █ █       █   █████   │
  7. │     █   █████ ████       █      ███  █    █    ████  █████   █   █   █   │
  8. │                                                                          │
  9. │                      by Tumblin / Bodies In Motion                       │
  10. └──────────────────────────────────────────────────────────────────────────┘
  11.  
  12. ████████████████████████████████████████████████████████████████████████████
  13.  
  14.                        What's in this doc file anyway?
  15.  
  16.  
  17. - Introduction to VED v0.4 beta
  18. - Sample object files
  19. - How to create your own objects
  20. - Some chat about the source code
  21.  
  22.  
  23.  
  24.     
  25.     
  26. ███████████████████████Introduction to VED v0.4 beta████████████████████████
  27.     
  28.     VED v0.4 beta is a little prototype for a vector editor that I am working
  29. on.  At present it is just a text file parser / display program, but
  30. eventually will become a menu driven, fully graphical vector editor.
  31. Actually, this is a very late release.  I had this thing all programmed like
  32. five months ago, but lost interest in it because I have been working on the
  33. newer graphical version of it, which is a total reprogramming of this one.
  34. This version comes with a collection of object files that you can take a look
  35. at to help you create some of your very own 3D light source shaded polygon
  36. objects.  The format is very simple and anybody should be able to do it.  If
  37. you've been wanting to make a 3D demo object, but never had the means to,
  38. then here's your chance!
  39.  
  40.     Here's sytax for the editor:
  41.  
  42.     VED04B filename.ext
  43.  
  44.     I am using the extension .v04 just in case I decide to change the format.
  45. Wouldn't want the object files getting mixed up with the different versions!
  46. If you've made any objects with VED v0.3 beta, the file format is exactly the
  47. same, just rename the files from "filename.V03" to "filename.V04".  But this
  48. version can load with the .V03 extension without a problem.  I just like to
  49. keep things a little organized :-)
  50.  
  51.     The vector object display program (VED04B.EXE) is menu driven and allows
  52. you to do a few simple things with the object.  You can rotate the object on
  53. the x axis, y axis, z axis, and all three axis at once.  You can change the
  54. position of the light source.  You can also increase or decrease the
  55. distance the object is from the center of the world (0,0,0).  The default
  56. distance is 256.  If you design a large object, it is a good idea to increase
  57. the distance so that the object will fit onto the screen.
  58.     
  59.                             
  60. ████████████████████████████Sample object files█████████████████████████████
  61.  
  62. Here is a list of the objects that are part of this release:
  63. (all of them are created by me, Tumblin)
  64.  
  65.  
  66. 14SIDED  V04  - 14 sided prism by Tumblin
  67. CUBE     V04  - simple cube by Tumblin
  68. CYLINDER V04  - cylinder by Tumblin
  69. LETTERR  V04  - letter "R" by Tumblin
  70. LETTERT  V04  - letter "T" by Tumblin
  71. PUCK     V04  - hockey puck by Tumblin
  72. PYRAMID  V04  - pyramid by Tumblin
  73. QBINAQB  V04  - cube inside a cube by Tumblin
  74. SPHERE   V04  - sphere by Tumblin
  75. STAR     V04  - 6 pointed star by Tumblin
  76. SWORD    V04  - sword by Tumblin
  77. TRIPIPE  V04  - triangular pipe designed by Total Package
  78. 3DFLAG   V04  - Canadian flag by Rush
  79. CONE     V04  - cone by Rush
  80. DIAMOND  V04  - diamond by Rush
  81. PAPERAIR V04  - paper air plane by Tumblin
  82.  
  83.                            
  84. ████████████████████████How to create your own objects██████████████████████
  85.  
  86.  
  87.     If you think you are ready to start making your own objects, then read on.
  88.  
  89.     First I will explain a little theory of how 3D works.  A vector object
  90. is simply a bunch of points that are placed at specific coordinates on an
  91. imaginary graph.  Those points are then joined together forming the corners
  92. of polygons.  All of the polygons together create the object.  If you
  93. remember the cartesian graph that your math teacher yacked about in high
  94. school, then you are well on your way.  Its the same idea except you have one
  95. more dimension.  You have the vertical & horizontal dimensions, and now a
  96. depth.
  97.  
  98.     Each 3D point is specified with three numbers in the form of (x,y,z).
  99.  
  100.  
  101.     X is the horizontal dimension (left and right).  The center is at 0.
  102. X grows increasingly negative as you move left, and grows increasingly
  103. positive as you go to the right.  See the number line below:
  104.  
  105.          
  106.          -5   -4   -3   -2   -1    0    1    2    3    4    5
  107.      - <-------------------------     -------------------------> +
  108.  
  109.  
  110.     Y is the vertical dimension (up and down).  The center is at 0.  Y grows
  111. increasingly negative as you move down, and grows increasingly positive as
  112. you go up.  See number line below:
  113.  
  114.                                    +
  115.                                    
  116.                                    ^
  117.                                    | 5
  118.                                    | 4
  119.                                    | 3
  120.                                    | 2
  121.                                    | 1
  122.                                      0
  123.                                    |-1
  124.                                    |-2
  125.                                    |-3
  126.                                    |-4
  127.                                    |-5
  128.                                    v
  129.  
  130.                                    -
  131.  
  132.  
  133.     Z is the depth dimension.  The center is at 0 (surface of your monitor).
  134. Z grows increasingly negative as you go into the screen, and grows
  135. increasingly positive as you come out of the screen towards your face.  See
  136. number line below:
  137.                                       -
  138.  
  139.                                    / -5           <-- inside screen
  140.                                   / -4
  141.                                  / -3
  142.                                 / -2
  143.                                / -1
  144.               ................   0.................  <-- screen
  145.                              /  1
  146.                             /  2
  147.                            /  3
  148.                           /  4                    <-- air infront of screen
  149.                          /  5
  150.                         
  151.                        +
  152.  
  153.     So when you put it all together, you have a graph system that looks like
  154. this:
  155.                                             
  156.                                   up               
  157.                                   (+)             (-)(into screen)
  158.                                                  
  159.                                    |           /
  160.                                    |         /
  161.                                    |       /
  162.                                    |     /
  163.                                    |   /
  164.                                    | / 
  165.                 left(-) -----------+------------- (+)right
  166.                                  / |  
  167.                                /   |  
  168.                              /     |  
  169.                            /       |  
  170.                          /         |  
  171.                        /           |
  172.                                  
  173.      (towards you)(+)             (-)
  174.                                   down
  175.  
  176.  
  177.     To specify a 3D point you simply state its x, y, and z coordinate
  178. together, like (x,y,z).
  179.  
  180.     The next thing to understand about 3D polygon objects is how to construct 
  181. polygons.  Polygons are just multi-sided closed off shapes.  In this vector
  182. editor, there is a restriction, as most polygon systems do, you must make
  183. sure that the polygons are convex.  What this means is that when you draw a
  184. straight line through any part of a polyon, it can only cut through two
  185. edges.  Any more will make it a concave polygon and will not display properly
  186. when viewed.  A simple way to identify if the polygon is convex is to see if
  187. all of the vertices (corners where two edges meet) point outward from the
  188. interior.  See the diagram below for an idea of what I mean:
  189.  
  190.  
  191.             ------------\
  192.           /               \
  193.          /                  \           This is a convex polygon.
  194.         /                     \
  195.        /                        \       It WILL display correctly.
  196.       /                         |
  197.       \                         |       Notice how all the corners point
  198.        \                        |       outwards.
  199.         \------------------------
  200.  
  201.  
  202.  
  203.             ------------\
  204.           /               \
  205.          /                  \           This is a concave polygon.
  206.         /                     \
  207.        /                        \       It will NOT display correctly
  208.       /               /----------
  209.       \              /                  Notice how not all the corners
  210.        \            /                   point outward.
  211.         \----------/
  212.  
  213.  
  214.      To get around this problem, split the polygon into 2 or more smaller
  215. polygons, like this:
  216.  
  217.             ------------\
  218.           / -             \
  219.          /    -             \         These are 2 convex polygons joined
  220.         /       -             \       together to make up a concave one.
  221.        /          -             \       
  222.       -             - -----------     It will now display correctly.
  223.       \              /                  
  224.        \            /                 Notice how all the corners of each
  225.         \----------/                  polygon point outward from its center.
  226.  
  227.  
  228.  
  229.     To be able to draw the polygons, you must list the vertices that you
  230. want to connect together.  Guess what,  there is another restriction!  The
  231. vertices must be listed in counter-clockwise order when that particular
  232. polygon is facing you.  If you listed them clockwise, then it will not be
  233. displayed.  This is how the polygon drawing code eliminates non-visible
  234. surfaces (a.k.a backface removal, or backface culling).
  235.  
  236.     Suppose you wanted to have some polygons that were supposed to be visible
  237. on both sides instead of just one.  How would you get around the restricton 
  238. that a polygon can only have one visible side?  Well, what you do is define
  239. one side of the polygon in counter-clockwise order, then spin the polygon
  240. around so that the other side is visible and define that in counter-clockwise
  241. order.  So this means that you define the same polygon twice, once for each
  242. visible side.
  243.  
  244.     Okay, you now know enough to be able to start creating your own objects.
  245. Let's introduce the file format now.  First here are some pointers on what
  246. is allowed to be in the file:
  247.  
  248.     Comments are allowed on any line in the file.  You start the comment
  249. with the "*" character and it ends with the carriage return (when you press
  250. the ENTER key).  Essentially this is the same idea as comments in a C++
  251. program.  Because the comment goes to the end of the line, you must make sure
  252. that you don't comment out the required data that you need to make your
  253. object load correctly.  So put them either on their own line, or AFTER all
  254. the important information is there.
  255.  
  256.     All of the numbers that appear in the file (except for the ones after
  257. the comment character "*" - they are not used anyway) must be integers.  This
  258. means that they can have a value between -32768 and 32767, including zero.
  259. All of the numbers must be separated by a character other than a numerical
  260. digit or a negative sign.  I use commas because thats how I was always taught
  261. to separate items in lists :-)   A word of warning!!!  You MUST add a
  262. separation character after the last uncommented number on the line.  Remember
  263. the editor will ignore everything in the comment lines and blank space
  264. throughout the file.  What would happen is the editor would read the last
  265. number on the line and then stick the first number on the next line to the
  266. end of the previous line.  This makes a big mess and can crash the editor.
  267.  
  268.     Negative numbers should have a negative sign directly infront of the
  269. number (eg.  -5,-123,-30).  Positive numbers should not have any symbols
  270. infront of them at all. (eg.  1,15,66).
  271.  
  272.     The very center of the object is at coordinate 0,0,0.  This means that
  273. all of the rotations are performed using this coordinate as the pivot point.
  274. Please keep this in mind when creating your objects.  If you know what you
  275. are doing, then you can offset the object a bit and then you can get some
  276. cool looking whirling effects :-)
  277.  
  278.     Now that you know what is allowed and what is not, here is what must
  279. appear in the file:
  280.  
  281. a)  the number of vertices in the object
  282. b)  list all the vertices by giving their 3D coordinates  x,y,z.
  283. c)  the number of polygons in the object
  284. d)  list all the polygons in the following format:
  285.     i.    the number of vertices in the polygon
  286.     ii.   list the vertices making the polygon in counter clock wise order
  287.           when visible
  288.     iii.  the color of the polygon (not used in VED v0.3 beta, but will
  289.           have a use in later versions to choose a color gradiant range,
  290.           so that you can have multiple light source shading colors to use).
  291.  
  292.     
  293.     The following list shows the light source shading colors available in
  294. VED v0.4 beta:
  295.  
  296.     1 = grey   (white to dark grey)
  297.     2 = red    (light pink to deep red)
  298.     3 = yellow (light yellow to tan)
  299.     4 = blue   (light blue to deep blue)
  300.     5 = purple (light purple to deep purple)
  301.     6 = green  (light green to deep green)
  302.     7 = brown  (tan to dark brown)
  303.  
  304.  
  305.     Thats it!  Thats all you need to make an object.  A good thing to do is
  306. to comment EVERYTHING!!!!!  I can't stress this enough.  When you are listing
  307. the vertices, put a comment at the end of the line and number them starting
  308. at zero.  This will be necessary when you are ready to start defining your
  309. polygons.  When you are defining your polygons, do step (d) all on the same
  310. line, and group all the polygons that make a major section of your object.
  311. This makes "debugging" your object easier.
  312.  
  313.     The following is a sample object that makes a cube:
  314.  
  315. --------------------------------- cut here ----------------------------------
  316. * This is an example object for the new VED v0.4b
  317. * by Tumblin / Bodies In Motion
  318.  
  319. 8, * number of vertices
  320.  
  321. * list of vertices
  322. * format:
  323. * x,y,z,
  324. -50,50,-50,  * vertex 0 : back top left
  325. 50,50,-50,   * vertex 1 : back top right
  326. 50,-50,-50,  * vertex 2 : back bottom right
  327. -50,-50,-50, * vertex 3 : back bottom right
  328. -50,50,50,   * vertex 4 : front top left
  329. 50,50,50,    * vertex 5 : front top right
  330. 50,-50,50,   * vertex 6 : front bottom right
  331. -50,-50,50,  * vertex 7 : front bottom left
  332.  
  333. 6, * number of polygons in object
  334.  
  335. * polygons for object
  336. * format:
  337. * # of polygons, list of vertices, color of polygon
  338. 4,  0,4,5,1,  1, * top  (as viewed from front)
  339. 4,  7,3,2,6,  2, * bottom
  340. 4,  0,3,7,4,  3, * left
  341. 4,  5,6,2,1,  4, * right
  342. 4,  1,2,3,0,  5, * back
  343. 4,  4,7,6,5,  6  * front
  344.  
  345. * all done, end of object :-)
  346. --------------------------------- cut here ----------------------------------
  347.  
  348. Note that I don't bother putting a comma after the last relevant number.
  349. The "6" in this case.  Since there are no more numbers to be read in, this
  350. is okay.  Just don't get carried away with it.
  351.  
  352.     Here are some final tips on creating your own cool objects.  Start out by
  353. drawing a sketch of what you want it to look like on some paper.  Then try
  354. to draw a nice, neat LARGE diagram on some graph paper.  Label all of your
  355. vertices starting at zero.  For surfaces that you can't see, draw another
  356. diagram, rotating the object around so that the vertices are visible and keep
  357. the numbering consistent.  This a rather awkward way to design an object
  358. unless you are good at visualizing things in three dimensions in your head.
  359. (Thankfully I can do that without a problem 8-).  Another tip is when you are
  360. defining your polygons and listing the vertices making a particular polygon.
  361. If the polygon is visible that way you have drawn it, the list it in counter-
  362. clockwise order.  If it is not visible, then list it in clockwise order.
  363. This will help you eliminate re-drawing your diagrams provided they are not
  364. too complex and you have enough room to draw all the points and label them.
  365. Its also a good idea to label the axis and even jot down some of the major
  366. coordinates in the object.  Makes things a little easier to visualize.
  367.  
  368. See VED.REV for information on the revision history of VED.
  369.  
  370.                       
  371. ███████████████████████Some chat about the source code██████████████████████
  372.  
  373.     Just for your information, this stuff was developed using:
  374. A 486-DX 33MHz computer, Turbo C++ v3.0, TASM v3.1, XLIB v6.1.
  375.  
  376.  
  377.     Alright, here is how to get this thing compiled and running:
  378.  
  379. 1. Go into the Turbo C++ IDE (I am assuming you are using a Borland C++
  380.      compiler) and load in the ved04b.prj project.
  381. 2. When you get this far you should make sure that you are using the large
  382.      memory model (try doing an ALT [O]ptions, [C]ompiler, [C]ode generation,
  383.      and then select the large memory model).
  384. 3. Next you have to make sure that you have the correct directories setup.
  385.      On my system here is what I have done:
  386.      My copy of Turbo C++ is in the c:\tc directory, so what I did was create
  387.      a directory called c:\tc\xlib61 and put all the XLIB 6.1 files in there.
  388.      Then you must make sure that your directories in your IDE take this into
  389.      account.  Use the Alt [O]ptions, [D]irectory keys.
  390.      On my system I have them set to these:
  391.          Include directories:
  392.              c:\TC\INCLUDE; C:\TC\XLIB61
  393.          Library directories:
  394.              c:\TC\LIB; C:\TC\XLIB61
  395.      If you are using the Borland C++ 3.1 compiler, for example, then you
  396.      might have to change the TC above to BC, and the rest should be the same
  397.      (hopefully :-).
  398.  
  399.      This makes it very convenient for me to compile and maintain the stuff I
  400.      make with XLIB.  For example I can just simply use #include <xlib_all.h>
  401.      at the beginning of my C++ program and don't have to worry about it.
  402.      Oh, by the way, I highly recommend the XLIB graphics library to people
  403.      who are starting out.  It is this library that I have been doing most of
  404.      my coding with and find it very useful.
  405.  
  406. 4. The files that should be in your project file are:
  407.      ved04b.cpp   - the main program
  408.      fixedl.asm   - the 32-bit fixed point multiply and divide functions
  409.      xlib61l.lib  - XLIB v6.1 large memory model library file.
  410. 5. The files you should have in your current directory (which ever one you
  411.      want to compile VED v0.4 beta in) are:
  412.      ved04b.cpp   - the main program
  413.      fixedl.asm   - the 32-bit fixed point multiply and divide functions
  414.      ved04clr.h   - include file that contains the palette data
  415.      xlib61l.lib  - the XLIB v6.1 library file to link with your code
  416. 6. Then hit F9 (Make) and watch the program compile and link.
  417. 7. You should be able to run it from your compiler with ALT [R]un, and [R]un.
  418.      Usually I just drop to DOS and test it there because I usually spit out
  419.      text for debugging purposes, but you don't have to if you don't want to.
  420.  
  421.  
  422.     That should get you started.  But if not, just email me at:
  423. m9cl@jupiter.sun.csd.unb.ca
  424. and I will get back to you as soon as possible.
  425.  
  426.  
  427. ████████████████████████████████████████████████████████████████████████████
  428.  
  429.  
  430. signed,  Tumblin
  431.  
  432. P.S.  Don't bother emailing me any object files (not that anybody has emailed
  433.       me any objects from the VED v0.3 beta release anyway :-).
  434.       I have the new graphical version of VED v1.0 almost ready.  I have also
  435.       created a file convertor so that you can convert these objects to the
  436.       new .V10 format (more info on that when I release it).
  437.  
  438.